home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 1 / Gold Medal Software Volume 1 (Gold Medal) (1994).iso / prog / actlib17.arj / BCTOOLS.ARJ / INPDATE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-25  |  2.0 KB  |  82 lines

  1. #include "date.h"
  2. #include "bctools.h"
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. #include <dos.h>
  8.  
  9.  
  10. /***
  11.  *  Function    :   input_date
  12.  *
  13.  *  Description :   Input day, month and year at given position.
  14.  *
  15.  *  Parameters  :   in   int *  day
  16.  *                  in   int *  month
  17.  *                  in   int *  year
  18.  *                  in   int    xpos
  19.  *                  in   int    ypos
  20.  *
  21.  *  Decisions   :   Default = current date
  22.  *            Century may be omitted.
  23.  *            Colors = white on blue
  24.  *        
  25.  *  Return      :    0 if OK
  26.  *                  -1 if no input
  27.  *
  28.  *  OS/Compiler :   MS-DOS & Turbo-C
  29.  ***/
  30.  
  31. int input_date( int *day , int *month  , int *year , int xpos , int ypos )
  32.  
  33. { struct text_info info ;
  34.   struct date today ;
  35.  
  36.  
  37.   gettextinfo( &info ) ;     /*  Save current window settings  */
  38.  
  39.   window( xpos , ypos , xpos+11 , ypos ) ;
  40.   textbackground(BLUE) ;
  41.   clrscr() ;
  42.   textcolor(WHITE) ;
  43.  
  44.   getdate( &today ) ;        /* Get current date */
  45.  
  46.   for (;;) { char buffer[14] ;
  47.          int i ;
  48.  
  49.          *day   = today.da_day ;
  50.          *month = today.da_mon ;
  51.          *year  = today.da_year ;
  52.          gotoxy( 2 , 1 ) ;
  53.          cprintf( "%2d-%02d-%4d" , *day , *month , *year ) ;
  54.          gotoxy( 2 , 1 ) ;
  55.  
  56.          i = getch() ;
  57.          if ( i == ESC ) return -1 ;
  58.          if ( i == RETURN ) break ;
  59.  
  60.          clreol() ;
  61.          ungetch( i ) ;
  62.          *buffer = 11 ;
  63.          cgets( buffer ) ;
  64.          i = sscanf( buffer+2 , "%d%[^0-9]%d%[^0-9]%d" , day , NULL , month , NULL , year ) ;
  65.          if ( i <= 0 ) return -1 ;
  66.          if ( *year < 100 ) *year += 1900 ;
  67.          if ( isdatevalid(*day , *month , *year) )
  68.         {
  69.            gotoxy( 2 , 1 ) ;
  70.           cprintf( "%02d-%02d-%4d" , *day , *month , *year ) ;
  71.           break ;
  72.         }
  73.          else beep() ;
  74.      }
  75.  
  76.            /*  Restore previous window settings  */
  77.   window( info.winleft , info.wintop , info.winright , info.winbottom ) ;
  78.   textattr( info.attribute ) ;
  79.  
  80.   return 0 ;
  81. }
  82.